/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	aux_task.c
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-05-09
**	Function List： 
**  History:         
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                             INCLUDE FILES
*********************************************************************************************************
*/
#include "log_console.h"
#include "modbus.h"
#include "os_config.h"
#include <rtthread.h>
#include "timer.h"
#include "lldcx7.h"
#include "signal.h"
/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                              	结构体定义
*********************************************************************************************************
*/

 
/*
*********************************************************************************************************
*                                              	函数原型声明
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	全局变量定义
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                              	模块静态变量定义
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	函数定义
*********************************************************************************************************
*/




/*
*********************************************************************************************************
*                                               本地函数声明
*********************************************************************************************************
*/

static void test_tmr_callback(void* arg);
static void modbus_uart_recv_callback(void* arg,uint8_t *rxbuff,uint8_t rxsize);
/*
*********************************************************************************************************
*@brief:						
*********************************************************************************************************
*/
static struct MODBUS_T h_modbus;
static volatile uint8_t modbus_ack;
static rt_timer_t	p_timer;
static __IO uint64_t tick = 0;
static trig_callback pfn_trig_callback;
static uint8_t cap_read_flag = 0;
/*
*********************************************************************************************************
*
*********************************************************************************************************
*/
void lldcx7_init(trig_callback arg)
{
	pfn_trig_callback = arg;
	
	signal_init(SURFACE_LIMIT,NULL);
//	signal_init(COLLISION_LIMIT,NULL);
	
	if(MODBUS_ERRNONE != modbus_init(&h_modbus,UART7/*MOONS_SERVO_UART*/,38400))
	{
		Critical_Log("servo modbus failed!\r\n");
		return;
	}
	h_modbus.pfn_recv_callback = modbus_uart_recv_callback;
	p_timer = rt_timer_create("test timer",test_tmr_callback,RT_NULL,200,RT_TIMER_FLAG_PERIODIC);
	if(p_timer == NULL)
	{
		Critical_Log("%s create timer failed!\r\n","test timer");
	}
	else
		rt_timer_start(p_timer);
	//空针校准
	
	rt_thread_delay(1000);
	uint16_t cfg = 0x0001;
	modbus_write(&h_modbus,0x01,0x06,0x0006,1,&cfg);
	modbus_ack = 1;
	//设置触发阈值
	rt_thread_delay(100);
	int16_t threshold = 900;
	modbus_write(&h_modbus,0x01,0x06,0x0002,1,&threshold);
	modbus_ack = 1;
	rt_thread_delay(200);
	cap_read_flag = 1;
}
void lldcx7_act(lldcx7_status_t arg)
{
	cap_read_flag = arg;
}
static void test_tmr_callback(void* arg)
{
	if(cap_read_flag && modbus_ack == 0)
	{
//		modbus_ack = 1;
//		modbus_read(&h_modbus,0x01,0x03,0x0001,0x0001);
	}
}
static void modbus_uart_recv_callback(void* arg,uint8_t *rxbuff,uint8_t rxsize)
{
	read_ack_t* p_recv = (read_ack_t*)rxbuff;
	int16_t capacity;
	if(p_recv->fn == 0x03)
	{
//		capacity= (p_recv->msb<<8) + (p_recv->lsb);
//		Trace_Log("Read capacity %d;\r\n",capacity);
//		uint16_t status = (p_recv->addr_msb<<8) + p_recv->addr_lsb;
//		if((status & 0x1000) && run_status == 1)
//		{
//			Trace_Log("DMR9045 run finished,cost %d ms;\r\n",TIM_1K.cnt - tick);
//			tick = TIM_1K.cnt;
//		}
	}
	if(modbus_ack && (p_recv->fn == 0x03 || p_recv->fn == 0x06 || p_recv->fn == 0x04
		|| p_recv->fn == 0x10) )
	{
		modbus_ack = 0;
	}
}
/*
*********************************************************************************************************
*					
*********************************************************************************************************
*/
